18684
24633
Qual è il metodo più veloce per convertire un java.nio.ByteBuffer a in un CharBuffer b (appena creato) o char [] b.
In questo modo è importante che a [i] == b [i]. Ciò significa che non a [i] e a [i + 1] insieme costituiscono un valore b [j], cosa farebbe getChar (i), ma i valori dovrebbero essere "distribuiti".
byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // ogni un byte (che sono con segno)
char b [] = {1,2,3, 125,126,127, 128, 129, 130} // ognuno a char (che sono senza segno)
Nota che byte: -128 ha gli stessi bit (8 inferiori) di char: 128. Quindi presumo che la "migliore" interpretazione sarebbe come l'ho notato sopra, perché i bit sono gli stessi.
Dopodiché ho anche bisogno della traduzione viceversa: il modo più efficiente per riportare un char [] o java.nio.CharBuffer in un java.nio.ByteBuffer. 
Quindi, quello che vuoi è convertire usando la codifica ISO-8859-1.
Non pretendo nulla sull'efficienza, ma almeno è abbastanza breve da scrivere:
Risultato CharBuffer = Charset.forName ("ISO-8859-1"). Decode (byteBuffer);
L'altra direzione sarebbe:
ByteBuffer risultato = Charset.forName ("ISO-8859-1"). Encode (charBuffer);
Si prega di misurarlo rispetto ad altre soluzioni. (Per essere onesti, la parte Charset.forName non dovrebbe essere inclusa e dovrebbe anche essere eseguita una sola volta, non di nuovo per ogni buffer.)
Da Java 7 in poi c'è anche la classe StandardCharsets con istanze Charset preistanziate, quindi puoi usare
Risultato CharBuffer = StandardCharsets.ISO_8859_1.decode (byteBuffer);
e
Risultato ByteBuffer = StandardCharsets.ISO_8859_1.encode (charBuffer);
anziché. (Queste righe fanno lo stesso di quelle precedenti, solo la ricerca è più semplice e non c'è il rischio di digitare erroneamente i nomi e non c'è bisogno di catturare le eccezioni impossibili.)
|
Sono d'accordo con @ Ishtar's, suggerisco di evitare di convertirsi in una nuova struttura e di convertirli solo quando ne hai bisogno.
Tuttavia se hai un ByteBuffer heap puoi farlo.
ByteBuffer bb = ...
byte [] array = bb.array ();
char [] chars = new char [bb.remaining ()];
for (int i = 0; i